package cn.hp.service.util;


import cn.hp.pojo.Customer;
import cn.hp.pojo.TblCouponSendInfo;
import cn.hp.pojo.TblUserCoupon;
import cn.hp.service.coupon.CouponService;
import cn.hp.service.customer.CustomerService;
import cn.hp.util.SysLog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class TimedTask {
    // 定时调度任务 直接依赖域 service层 都是归spring管理 使用di 依赖注入
    // 设置消费用户金额大于500元的用户(实时变化的 订单表、用户表)  新(变化 用户表) 老用户(固定)  注册时间(固定)
    // 针对固定的用户-- 提示未领取的领取 (1.查询符合的人群 2.查询没有本优惠券的用户 3.发送优惠券 )
    // 针对变化的用户--重新发送 ( 1.查询人群  2.发送 )
    @Autowired
    private CustomerService customerService ;

    @Autowired
    private CouponService couponService ;

    // 每两个小时调用一次

    // 秒   分  时 一个月中的日(L)  月(0~11)  周几(1-7)
    // 使用 * 任意  */5   日和周 一个*一个是?
//    @Scheduled(cron = "* * */2 * * ?")
//    @Scheduled(cron = "0 0 0 L * ?")
    @Scheduled(cron = "0 0 */2 * * ?")
    @SysLog(module = "后端管理" , operation = "优惠券自动发放"  , method = "task_sendCoupon")
    public void taskByRegisterTime(){ //  2 / 7 / 1
       // 每两个小时针对未过期的优惠进行短信发送提示
        // 1. 查询当前使用的优惠券名称 已启用
        List<TblCouponSendInfo> sendList = couponService.findAllSendListCouponSendName();
        System.out.println("---------------------------");
        System.out.println(sendList);
        for (TblCouponSendInfo tblCouponSendInfo : sendList){
            // 拿到了所有的发送优惠券  判断人群
            if (tblCouponSendInfo.getSendList().equals("2021-10-01之后注册用户")){
                List<Customer> customers = customerService.findAllByRegisterTime("2021-10-01");
                // 乘客id  优惠券id
                for (Customer customer : customers){
                    TblUserCoupon tblUserCoupon = new TblUserCoupon() ;
                    tblUserCoupon.setCouponId(tblCouponSendInfo.getCouponId());
                    tblUserCoupon.setPassengerId(customer.getId());
                    tblUserCoupon.setPhoneNumber(customer.getPassengerName());
                    tblUserCoupon.setPhoneNumber(customer.getPhone());
                    // 判断用户是否已经拥有当前优惠券
                    int count = couponService.findCountCoupon(tblCouponSendInfo.getCouponId() , customer.getId());
                    if (count == 0 )
                    couponService.addUserCoupon(tblUserCoupon);
                }
            }
        }
       //  1.先判断当前系统中的用户，有符合发放条件的， 2.对符合的用户发放优惠券
        // 查询注册时间 晚于2021-10-01日
    }
}
